// Package apps 注册api
package apps

import (
	"errors"
	"fmt"
	"github.com/gin-gonic/gin"
)

var (
	// ApiObjs 用来存放注册过来的api
	ApiObjs = map[string]ApiObj{}
)

// ApiObj 管理Api的IOC接口
type ApiObj interface {
	AppObj
	RegisterRouter(router gin.IRouter)
}

// 注册Api的方法
func RegisterApi(obj ApiObj) {
	//先查找，看看api是否注册过了，没注册才注册，注册过了就直接panic
	if _, ok := ApiObjs[obj.Name()]; ok {
		panic(errors.New("api" + obj.Name() + "已注册过！"))
	} else {
		ApiObjs[obj.Name()] = obj
		fmt.Printf("api %s 注册成功。\n", obj.Name())
	}
}

// GetApi 从IOC获取api的方法
func GetApi(apiname string) ApiObj {
	if v, ok := ApiObjs[apiname]; ok {
		return v
	} else {
		panic(errors.New("api" + apiname + "尚未注册！"))
	}
}
